﻿/*
    Original Author: Zuoyuan Wang
    Copyright (c) 2024 Zuoyuan Wang
*/

#include "wstd/utils.h"

const double g_c0[1] = {
    1.000000000000000000
};

const double g_c1[2] = {
    1.000000000000000000,
    1.000000000000000000
};

const double g_c2[3] = {
    1.000000000000000000,
    2.000000000000000000,
    1.000000000000000000
};

const double g_c3[4] = {
    1.000000000000000000,
    3.000000000000000000,
    3.000000000000000000,
    1.000000000000000000
};

const double g_c4[5] = {
    1.000000000000000000,
    4.000000000000000000,
    6.000000000000000000,
    4.000000000000000000,
    1.000000000000000000
};

const double g_c5[6] = {
    1.000000000000000000,
    5.000000000000000000,
    10.00000000000000000,
    10.00000000000000000,
    5.000000000000000000,
    1.000000000000000000
};

const double g_c6[7] = {
    1.000000000000000000,
    6.000000000000000000,
    15.00000000000000000,
    20.00000000000000000,
    15.00000000000000000,
    6.000000000000000000,
    1.000000000000000000
};

const double g_c7[8] = {
    1.000000000000000000,
    7.000000000000000000,
    21.00000000000000000,
    35.00000000000000000,
    35.00000000000000000,
    21.00000000000000000,
    7.000000000000000000,
    1.000000000000000000
};

const double g_c8[9] = {
    1.000000000000000000,
    8.000000000000000000,
    28.00000000000000000,
    56.00000000000000000,
    70.00000000000000000,
    56.00000000000000000,
    28.00000000000000000,
    8.000000000000000000,
    1.000000000000000000
};

const double g_c9[10] = {
    1.000000000000000000,
    9.000000000000000000,
    36.00000000000000000,
    84.00000000000000000,
    126.0000000000000000,
    126.0000000000000000,
    84.00000000000000000,
    36.00000000000000000,
    9.000000000000000000,
    1.000000000000000000
};

const double g_c10[11] = {
    1.000000000000000000,
    10.00000000000000000,
    45.00000000000000000,
    120.0000000000000000,
    210.0000000000000000,
    252.0000000000000000,
    210.0000000000000000,
    120.0000000000000000,
    45.00000000000000000,
    10.00000000000000000,
    1.000000000000000000
};

const double g_c11[12] = {
    1.000000000000000000,
    11.00000000000000000,
    55.00000000000000000,
    165.0000000000000000,
    330.0000000000000000,
    462.0000000000000000,
    462.0000000000000000,
    330.0000000000000000,
    165.0000000000000000,
    55.00000000000000000,
    11.00000000000000000,
    1.000000000000000000
};

const double g_c12[13] = {
    1.000000000000000000,
    12.00000000000000000,
    66.00000000000000000,
    220.0000000000000000,
    495.0000000000000000,
    792.0000000000000000,
    924.0000000000000000,
    792.0000000000000000,
    495.0000000000000000,
    220.0000000000000000,
    66.00000000000000000,
    12.00000000000000000,
    1.000000000000000000
};

const double g_c13[14] = {
    1.000000000000000000,
    13.00000000000000000,
    78.00000000000000000,
    286.0000000000000000,
    715.0000000000000000,
    1287.000000000000000,
    1716.000000000000000,
    1716.000000000000000,
    1287.000000000000000,
    715.0000000000000000,
    286.0000000000000000,
    78.00000000000000000,
    13.00000000000000000,
    1.000000000000000000
};

const double g_c14[15] = {
    1.000000000000000000,
    14.00000000000000000,
    91.00000000000000000,
    364.0000000000000000,
    1001.000000000000000,
    2002.000000000000000,
    3003.000000000000000,
    3432.000000000000000,
    3003.000000000000000,
    2002.000000000000000,
    1001.000000000000000,
    364.0000000000000000,
    91.00000000000000000,
    14.00000000000000000,
    1.000000000000000000
};

const double g_c15[16] = {
    1.000000000000000000,
    15.00000000000000000,
    105.0000000000000000,
    455.0000000000000000,
    1365.000000000000000,
    3003.000000000000000,
    5005.000000000000000,
    6435.000000000000000,
    6435.000000000000000,
    5005.000000000000000,
    3003.000000000000000,
    1365.000000000000000,
    455.0000000000000000,
    105.0000000000000000,
    15.00000000000000000,
    1.000000000000000000
};

const double g_c16[17] = {
    1.000000000000000000,
    16.00000000000000000,
    120.0000000000000000,
    560.0000000000000000,
    1820.000000000000000,
    4368.000000000000000,
    8008.000000000000000,
    11440.00000000000000,
    12870.00000000000000,
    11440.00000000000000,
    8008.000000000000000,
    4368.000000000000000,
    1820.000000000000000,
    560.0000000000000000,
    120.0000000000000000,
    16.00000000000000000,
    1.000000000000000000
};

const double g_c17[18] = {
    1.000000000000000000,
    17.00000000000000000,
    136.0000000000000000,
    680.0000000000000000,
    2380.000000000000000,
    6188.000000000000000,
    12376.00000000000000,
    19448.00000000000000,
    24310.00000000000000,
    24310.00000000000000,
    19448.00000000000000,
    12376.00000000000000,
    6188.000000000000000,
    2380.000000000000000,
    680.0000000000000000,
    136.0000000000000000,
    17.00000000000000000,
    1.000000000000000000
};

const double g_c18[19] = {
    1.000000000000000000,
    18.00000000000000000,
    153.0000000000000000,
    816.0000000000000000,
    3060.000000000000000,
    8568.000000000000000,
    18564.00000000000000,
    31824.00000000000000,
    43758.00000000000000,
    48620.00000000000000,
    43758.00000000000000,
    31824.00000000000000,
    18564.00000000000000,
    8568.000000000000000,
    3060.000000000000000,
    816.0000000000000000,
    153.0000000000000000,
    18.00000000000000000,
    1.000000000000000000
};

const double g_c19[20] = {
    1.000000000000000000,
    19.00000000000000000,
    171.0000000000000000,
    969.0000000000000000,
    3876.000000000000000,
    11628.00000000000000,
    27132.00000000000000,
    50388.00000000000000,
    75582.00000000000000,
    92378.00000000000000,
    92378.00000000000000,
    75582.00000000000000,
    50388.00000000000000,
    27132.00000000000000,
    11628.00000000000000,
    3876.000000000000000,
    969.0000000000000000,
    171.0000000000000000,
    19.00000000000000000,
    1.000000000000000000
};

const double g_c20[21] = {
    1.000000000000000000,
    20.00000000000000000,
    190.0000000000000000,
    1140.000000000000000,
    4845.000000000000000,
    15504.00000000000000,
    38760.00000000000000,
    77520.00000000000000,
    125970.0000000000000,
    167960.0000000000000,
    184756.0000000000000,
    167960.0000000000000,
    125970.0000000000000,
    77520.00000000000000,
    38760.00000000000000,
    15504.00000000000000,
    4845.000000000000000,
    1140.000000000000000,
    190.0000000000000000,
    20.00000000000000000,
    1.000000000000000000
};

const double g_c21[22] = {
    1.000000000000000000,
    21.00000000000000000,
    210.0000000000000000,
    1330.000000000000000,
    5985.000000000000000,
    20349.00000000000000,
    54264.00000000000000,
    116280.0000000000000,
    203490.0000000000000,
    293930.0000000000000,
    352716.0000000000000,
    352716.0000000000000,
    293930.0000000000000,
    203490.0000000000000,
    116280.0000000000000,
    54264.00000000000000,
    20349.00000000000000,
    5985.000000000000000,
    1330.000000000000000,
    210.0000000000000000,
    21.00000000000000000,
    1.000000000000000000
};

const double g_c22[23] = {
    1.000000000000000000,
    22.00000000000000000,
    231.0000000000000000,
    1540.000000000000000,
    7315.000000000000000,
    26334.00000000000000,
    74613.00000000000000,
    170544.0000000000000,
    319770.0000000000000,
    497420.0000000000000,
    646646.0000000000000,
    705432.0000000000000,
    646646.0000000000000,
    497420.0000000000000,
    319770.0000000000000,
    170544.0000000000000,
    74613.00000000000000,
    26334.00000000000000,
    7315.000000000000000,
    1540.000000000000000,
    231.0000000000000000,
    22.00000000000000000,
    1.000000000000000000
};

const double g_c23[24] = {
    1.000000000000000000,
    23.00000000000000000,
    253.0000000000000000,
    1771.000000000000000,
    8855.000000000000000,
    33649.00000000000000,
    100947.0000000000000,
    245157.0000000000000,
    490314.0000000000000,
    817190.0000000000000,
    1144066.000000000000,
    1352078.000000000000,
    1352078.000000000000,
    1144066.000000000000,
    817190.0000000000000,
    490314.0000000000000,
    245157.0000000000000,
    100947.0000000000000,
    33649.00000000000000,
    8855.000000000000000,
    1771.000000000000000,
    253.0000000000000000,
    23.00000000000000000,
    1.000000000000000000
};

const double g_c24[25] = {
    1.000000000000000000,
    24.00000000000000000,
    276.0000000000000000,
    2024.000000000000000,
    10626.00000000000000,
    42504.00000000000000,
    134596.0000000000000,
    346104.0000000000000,
    735471.0000000000000,
    1307504.000000000000,
    1961256.000000000000,
    2496144.000000000000,
    2704156.000000000000,
    2496144.000000000000,
    1961256.000000000000,
    1307504.000000000000,
    735471.0000000000000,
    346104.0000000000000,
    134596.0000000000000,
    42504.00000000000000,
    10626.00000000000000,
    2024.000000000000000,
    276.0000000000000000,
    24.00000000000000000,
    1.000000000000000000
};

const double g_c25[26] = {
    1.000000000000000000,
    25.00000000000000000,
    300.0000000000000000,
    2300.000000000000000,
    12650.00000000000000,
    53130.00000000000000,
    177100.0000000000000,
    480700.0000000000000,
    1081575.000000000000,
    2042975.000000000000,
    3268760.000000000000,
    4457400.000000000000,
    5200300.000000000000,
    5200300.000000000000,
    4457400.000000000000,
    3268760.000000000000,
    2042975.000000000000,
    1081575.000000000000,
    480700.0000000000000,
    177100.0000000000000,
    53130.00000000000000,
    12650.00000000000000,
    2300.000000000000000,
    300.0000000000000000,
    25.00000000000000000,
    1.000000000000000000
};

const double g_c26[27] = {
    1.000000000000000000,
    26.00000000000000000,
    325.0000000000000000,
    2600.000000000000000,
    14950.00000000000000,
    65780.00000000000000,
    230230.0000000000000,
    657800.0000000000000,
    1562275.000000000000,
    3124550.000000000000,
    5311735.000000000000,
    7726160.000000000000,
    9657700.000000000000,
    10400600.00000000000,
    9657700.000000000000,
    7726160.000000000000,
    5311735.000000000000,
    3124550.000000000000,
    1562275.000000000000,
    657800.0000000000000,
    230230.0000000000000,
    65780.00000000000000,
    14950.00000000000000,
    2600.000000000000000,
    325.0000000000000000,
    26.00000000000000000,
    1.000000000000000000
};

const double g_c27[28] = {
    1.000000000000000000,
    27.00000000000000000,
    351.0000000000000000,
    2925.000000000000000,
    17550.00000000000000,
    80730.00000000000000,
    296010.0000000000000,
    888030.0000000000000,
    2220075.000000000000,
    4686825.000000000000,
    8436285.000000000000,
    13037895.00000000000,
    17383860.00000000000,
    20058300.00000000000,
    20058300.00000000000,
    17383860.00000000000,
    13037895.00000000000,
    8436285.000000000000,
    4686825.000000000000,
    2220075.000000000000,
    888030.0000000000000,
    296010.0000000000000,
    80730.00000000000000,
    17550.00000000000000,
    2925.000000000000000,
    351.0000000000000000,
    27.00000000000000000,
    1.000000000000000000
};

const double g_c28[29] = {
    1.000000000000000000,
    28.00000000000000000,
    378.0000000000000000,
    3276.000000000000000,
    20475.00000000000000,
    98280.00000000000000,
    376740.0000000000000,
    1184040.000000000000,
    3108105.000000000000,
    6906900.000000000000,
    13123110.00000000000,
    21474180.00000000000,
    30421755.00000000000,
    37442160.00000000000,
    40116600.00000000000,
    37442160.00000000000,
    30421755.00000000000,
    21474180.00000000000,
    13123110.00000000000,
    6906900.000000000000,
    3108105.000000000000,
    1184040.000000000000,
    376740.0000000000000,
    98280.00000000000000,
    20475.00000000000000,
    3276.000000000000000,
    378.0000000000000000,
    28.00000000000000000,
    1.000000000000000000
};

const double g_c29[30] = {
    1.000000000000000000,
    29.00000000000000000,
    406.0000000000000000,
    3654.000000000000000,
    23751.00000000000000,
    118755.0000000000000,
    475020.0000000000000,
    1560780.000000000000,
    4292145.000000000000,
    10015005.00000000000,
    20030010.00000000000,
    34597290.00000000000,
    51895935.00000000000,
    67863915.00000000000,
    77558760.00000000000,
    77558760.00000000000,
    67863915.00000000000,
    51895935.00000000000,
    34597290.00000000000,
    20030010.00000000000,
    10015005.00000000000,
    4292145.000000000000,
    1560780.000000000000,
    475020.0000000000000,
    118755.0000000000000,
    23751.00000000000000,
    3654.000000000000000,
    406.0000000000000000,
    29.00000000000000000,
    1.000000000000000000
};

const double g_c30[31] = {
    1.000000000000000000,
    30.00000000000000000,
    435.0000000000000000,
    4060.000000000000000,
    27405.00000000000000,
    142506.0000000000000,
    593775.0000000000000,
    2035800.000000000000,
    5852925.000000000000,
    14307150.00000000000,
    30045015.00000000000,
    54627300.00000000000,
    86493225.00000000000,
    119759850.0000000000,
    145422675.0000000000,
    155117520.0000000000,
    145422675.0000000000,
    119759850.0000000000,
    86493225.00000000000,
    54627300.00000000000,
    30045015.00000000000,
    14307150.00000000000,
    5852925.000000000000,
    2035800.000000000000,
    593775.0000000000000,
    142506.0000000000000,
    27405.00000000000000,
    4060.000000000000000,
    435.0000000000000000,
    30.00000000000000000,
    1.000000000000000000
};

const double* g_c[31] = {
    g_c0,
    g_c1,
    g_c2,
    g_c3,
    g_c4,
    g_c5,
    g_c6,
    g_c7,
    g_c8,
    g_c9,
    g_c10,
    g_c11,
    g_c12,
    g_c13,
    g_c14,
    g_c15,
    g_c16,
    g_c17,
    g_c18,
    g_c19,
    g_c20,
    g_c21,
    g_c22,
    g_c23,
    g_c24,
    g_c25,
    g_c26,
    g_c27,
    g_c28,
    g_c29,
    g_c30
};
